package com.gitee.deament.server.core.cli.db.set;

import com.gitee.deament.server.config.SystemConfig;
import com.gitee.deament.server.core.annotation.CliHander;
import com.gitee.deament.server.core.cli.AbstractCli;
import com.gitee.deament.server.core.data.ConnectData;
import com.gitee.deament.server.core.data.DBData;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;

import java.util.List;

/**
 * SADD key member [member …]
 * 可用版本： >= 1.0.0
 * 时间复杂度: O(N)， N 是被添加的元素的数量。
 * 将一个或多个 member 元素加入到集合 key 当中，已经存在于集合的 member 元素将被忽略。
 *
 * 假如 key 不存在，则创建一个只包含 member 元素作成员的集合。
 *
 * 当 key 不是集合类型时，返回一个错误。
 * 返回值
 * 被添加到集合中的新元素的数量，不包括被忽略的元素。
 * @author  deament
 */
@CliHander(command = "SADD")
public class SADDcli extends AbstractCli {

    @Override
    public void executeCli(ChannelHandlerContext channelHandlerContext, String command) {
        List<String> cliValues = getValues(command);
        if (cliValues.size() <3) {
            channelHandlerContext.channel().writeAndFlush(new TextWebSocketFrame("ERR wrong number of arguments for 'SADD' command"));
            return;
        }
        int db = ConnectData.SELECT_DB_STORAGE.getUseDB(channelHandlerContext.channel().id().asLongText());
        DBData dbData = SystemConfig.dbData;
        String key = cliValues.get(1);
        for(int i=2;i<cliValues.size();i++){
            dbData.setSetData(db, key,cliValues.get(i));
        }
        channelHandlerContext.channel().writeAndFlush(new TextWebSocketFrame(dbData.getSet(db, key).getValue().size()+""));
    }
}
